home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Languages Suite
/
ProgLangD.iso
/
TURBOPASCAL WIN
/
DOCDEMOS.PAK
/
PALTEST.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-06-08
|
4KB
|
131 lines
{************************************************}
{ }
{ Turbo Pascal for Windows }
{ Demo program }
{ Copyright (c) 1991 by Borland International }
{ }
{************************************************}
program PaletteTest;
{$R-}
uses WObjects, WinTypes, WinProcs;
const
NumColors = 8;
RedVals : array[0..NumColors - 1] of Byte =
(0, 0, 0, 0, $FF, $FF, $FF, $FF);
GreenVals : array[0..NumColors - 1] of Byte =
(0, 0, $FF, $FF, 0, 0, $FF, $FF);
BlueVals : array[0..NumColors - 1] of Byte =
(0, $FF, 0, $FF, 0, $FF, 0, $FF);
type
PaletteApplication = object(TApplication)
procedure InitMainWindow; virtual;
end;
PTestWindow = ^TestWindow;
TestWindow = object(TWindow)
MyLogPalette: PLogPalette;
constructor Init(AParent: PWindowsObject; ATitle: PChar);
destructor Done; virtual;
procedure WMLButtonDown(var Msg: TMessage);
virtual wm_First + wm_LButtonDown;
procedure WMRButtonDown(var Msg: TMessage);
virtual wm_First + wm_RButtonDown;
end;
{ Helpful function for dealing with palette-index TColorRefs }
function PaletteIndex(W: Word): TColorRef;
begin
PaletteIndex := $01000000 or W;
end;
{--------------------------------------------------}
{ TestWindow method implementations: }
{--------------------------------------------------}
constructor TestWindow.Init(AParent: PWindowsObject; ATitle: PChar);
var
i: Integer;
begin
TWindow.Init(AParent, ATitle);
GetMem(MyLogPalette, SizeOf(TLogPalette) + SizeOf(TPaletteEntry) * NumColors);
MyLogPalette^.palVersion := $300;
MyLogPalette^.palNumEntries := NumColors;
for i := 0 to NumColors - 1 do
begin
MyLogPalette^.palPalEntry[i].peRed := RedVals[i];
MyLogPalette^.palPalEntry[i].peGreen := GreenVals[i];
MyLogPalette^.palPalEntry[i].peBlue := BlueVals[i];
MyLogPalette^.palPalEntry[i].peFlags := pc_Reserved;
end;
end;
destructor TestWindow.Done;
begin
FreeMem(MyLogPalette, (sizeof(TLogPalette) + sizeof(TPaletteEntry) * NumColors ));
TWindow.Done;
end;
procedure TestWindow.WMLButtonDown(var Msg: TMessage);
var
i: Integer;
ABrush, OldBrush: HBrush;
OldPalette: HPalette;
ThePalette: HPalette;
TheDC: HDC;
begin
ThePalette := CreatePalette(MyLogPalette^);
TheDC := GetDC(HWindow);
OldPalette := SelectPalette(TheDC, ThePalette, False);
RealizePalette(TheDC);
for i := 0 to NumColors - 1 do
begin
ABrush := CreateSolidBrush(PaletteIndex(i));
OldBrush := SelectObject(TheDC, ABrush);
Rectangle(TheDC, i * 25, i * 25, i * 25 + 20, i * 25 + 20);
SelectObject(TheDC, OldBrush);
DeleteObject(ABrush);
end;
SelectPalette(TheDC, OldPalette, False);
ReleaseDC(HWindow, TheDC);
DeleteObject(ThePalette);
end;
procedure TestWindow.WMRButtonDown(var Msg: TMessage);
var
i: Integer;
APaletteEntry : TPaletteEntry;
begin
APaletteEntry := MyLogPalette^.palPalEntry[0];
for i := 0 to NumColors - 2 do
MyLogPalette^.palPalEntry[i] := MyLogPalette^.palPalEntry[i + 1] ;
i := NumColors - 1;
MyLogPalette^.palPalEntry[i] := APaletteEntry;
end;
{--------------------------------------------------}
{ PaletteApplication method implementations: }
{--------------------------------------------------}
procedure PaletteApplication.InitMainWindow;
begin
MainWindow := New(PTestWindow,Init(nil, 'Test Palettes'));
end;
{--------------------------------------------------}
{ Main program: }
{--------------------------------------------------}
var
PalApp: PaletteApplication;
begin
PalApp.Init('PaletteApp');
PalApp.Run;
PalApp.Done;
end.